<?php
/**
 * Zugriff auf einen Eintrag der Staededatenbank
 *
 * @author		Joachim Ruf
 * @copyright	Copyright (c) 2003-2010 Loresoft Software (http://www.loresoft.de)
 * @license		http://yapary.loresoft.de/lizenzbedingungen     New BSD License
 *
 * */


Class Yapary_City_City
{
    /** @var Object $oSql			: Sql-Klasse fuer Datenbankzugriff */
    private $oSql           = NULL;
    /** @var Array $dataArray		: Feld aller Datenbankeintraege */
    private $arrData        = array();
    /** @var string $dbTableName	: Name der Datenbanktabelle */
    private $dbTableName    = 'yapary_city_city';
    /** @var int $zip				: Postleitzahl des entsprechenden Datensatzes */
    private $zip            = NULL;


    /**
     * @param Object $_oSql	: Datenbankklasse fuer Datenbankzugriff
     * @param int $_zip	: Postleitzahl des Datensatzes
     * */
    function __construct (Yapary_Db_Sql_Connector $_oSql, $_zip)
    {
        $this->oSql = $_oSql;

        if (is_object($_zip)) {
            $this->arrData   = (array) $_zip;
            $this->zip = $_zip->Zip;
        } elseif (is_numeric($_zip)) {
            if (strlen($_zip) < 1 || strlen($_zip) > 5) {
                trigger_error('Parameter 2 <b>_zip</b> is not between 1-5', E_USER_WARNING);
            }
            $this->zip  = $_zip;
            if (!$this->load()) {
                $e = new Exception();
                trigger_error('<pre>'.$e->getTraceAsString().'<br /><b>'.$_dbTableName.':</b> error while loading dataset <b>'.$_zip.'</b></pre>', E_USER_ERROR);
            }
        } else {
            trigger_error('Invalid numeric value for Parameter 2 _zip', E_USER_ERROR);
        }
            }


    /**
     * Liest die Datenbanktabelle aus uns speichert die Werte lokal ab
     * @return bool
     * */
    private function load ()
    {
        $oDbResult = $this->oSql->request('SELECT *
        					  FROM '.$this->dbTableName.' t1
        					  WHERE Zip=:zip',
                            array('zip' => $this->zip),
                            'city');

        if ($oDbResult->getCount() == 0) {
            return false;
        }

        $this->arrData = $oDbResult->getList();
        return true;
    }


    /**
     * Speichert die Daten im Array in der Datenbank ab
     * @return bool
     * */
    public function save()
    {
        $oDbResult = $this->oSql->request('UPDATE '.$this->dbTableName.'
        					  SET City=:city, Zip:zip, FederalState=:federalState, Signature=:signature
        					  WHERE Zip=:curZip',
                            array('cuZip'        => $this->zip,
                                  'city'         => $arrData['City'],
                                  'zip'          => $arrData['Zip'],
                                  'federalState' => $arrData['FederalState'],
                                  'signature'    => $arrData['Signature']),
                            'city');
        return true;
    }


    /**
     * Hilfsmethode zur Ausgabe eines Wertes
     * @param string $valueName	: Name des Datenbankrelation
     * @return string|NULL
     * */
    private function getValue ($valueName)
    {
        if (!isset($this->arrData[$valueName])) {
            trigger_error('<b>'.$valueName.'</b > data not available', E_USER_WARNING);
            return NULL;
        }

        return $this->arrData[$valueName];
    }


    /**
     * Liefert den Namen der Stadt
     * @return string
     * */
    public function getCity ()
    {
        return $this->getValue('City');
    }


    /**
     * Setzt den Namen der Stadt
     * @param string $_name	: Name der Stadt
     * @return void
     * */
    public function setCity ($_name)
    {
        if (!is_string($_name)) {
            return false;
        }

        $this->arrData['City'] = $_name;
        return true;
    }


    /**
     * Liefert die Postleitzahl
     * @return string
     * */
    public function getZip ()
    {
        return (int) $this->getValue('Zip');
    }


    /**
     * Setzt die Postleitzahl
     * @param int $_zip	: Postleitzahl der Stadt
     * @return void
     * */
    public function setZip ($_zip)
    {
        if (!is_numeric($_zip)) {
            return false;
        }

        $this->arrData['Zip'] = $_zip;
        return true;
    }


    /**
     * Liefert den Namen des Bundeslandes
     * @return string
     * */
    public function getFederalState ()
    {
        return Yapary_City_FederalState::getName($this->getValue('FederalState'));
    }


    /**
     * Setzt den Namen des Bundeslandes
     * @param string $_name	: Name des Bundeslandes
     * @return bool
     * */
    public function setFederalState ($_name)
    {
        if (!is_string($_name)) {
            return false;
        }

        $this->arrData['FederalState'] = Yapary_City_FederalState::getValue($_name);
        return true;
    }


    /**
     * Liefert den Status des Datensatzes
     * @return int
     * */
    public function getSignature ()
    {
        return (int) $this->getValue('Signature');
    }


    /**
     * Setzt den Status des Datensatzes
     * @param int $_id	: Status-Id des Datensatzes
     * @return bool
     * */
    public function setSignature ($_id)
    {
        if (!is_numeric($_id)) {
            return false;
        }

        $this->arrData['Signature'] = $_id;
        return true;
    }


}


?>